#

| Chapter 39 Time and Performance |

## 39.6 lastcomm: What Commands Are Running and How Long Do They Take?

When you're debugging a problem with a program, trying to figure out why your CPU usage bill is so high, or curious what commands someone (including yourself) is running, the lastcomm command on Berkeley-like UNIXes can help (if your computer has its process accounting system running, that is). Here's an example that lists the user lesleys:

>     % date
>     Mon Sep  4 16:38:13 EDT 1995
>     % lastcomm lesleys
>     emacs          lesleys  ttyp1      1.41 secs Wed Sep  4 16:28
>     cat          X lesleys  ttyp1      0.06 secs Wed Sep  4 16:37
>     stty           lesleys  ttypa      0.02 secs Wed Sep  4 16:36
>     tset           lesleys  ttypa      0.12 secs Wed Sep  4 16:36
>     sed            lesleys  ttypa      0.02 secs Wed Sep  4 16:36
>     hostname       lesleys  ttypa      0.00 secs Wed Sep  4 16:36
>     quota          lesleys  ttypa      0.16 secs Wed Sep  4 16:35
>        ...

The processes are listed in the order completed, most-recent first. The `emacs` process on the tty `ttyp1` (3.8) started ten minutes ago and took 1.41 seconds of CPU time. Sometime while emacs was on ttyp1, lesleys ran cat and killed it (the `X` shows that). Because emacs ran on the same terminal as cat but finished later, Lesley might have stopped emacs (with CTRL-z) (12.1) to run cat. The processes on `ttypa` are the ones run from her .cshrc and .login files (though you can't tell that from lastcomm). You don't see the login shell for `ttypa` (csh) here because it hasn't terminated yet; it'll be listed after Lesley logs out of ttypa.

lastcomm can do more. See its manual page.

Here's a hint: on a busy system with lots of users and commands being logged, lastcomm is pretty slow. If you pipe the output or redirect it into a file, like this:

    tee
    % lastcomm lesleys > lesley.cmds &
    % cat lesley.cmds
       ...nothing...
    % lastcomm lesleys | tee lesley.cmds
       ...nothing...

then the lastcomm output may be written to the file or pipe in big chunks instead of line-by-line. That can make it look as if nothing's happening. If you can tie up a terminal while lastcomm runs, there are two workarounds. If you're using a window system or terminal emulator with a "log to file" command, use it while lastcomm runs. Otherwise, to copy the output to a file, start script (51.5) and then run lastcomm:

>     % script lesley.cmds
>     Script started, file is lesley.cmds
>     % lastcomm lesleys
>     emacs          lesleys  ttyp1      1.41 secs Wed Sep  4 16:28
>     cat          X lesleys  ttyp1      0.06 secs Wed Sep  4 16:37
>        ...

>     % exit
>     Script done, file is lesley.cmds
>     %

A final word: lastcomm can't give information on commands that are built into the shell (1.10). Those commands are counted as part of the shell's execution time; they'll be in an entry for csh, sh, etc. after the shell terminates.

- JP

39.5 Why Is the System So Slow? |  | 39.7 Checking System Load: uptime